﻿using System;
using System.Web.UI.WebControls;
using COMMON;
using BLL;
using VO;

namespace PopPromotoraCallCenter.Admin
{
    public partial class AtendenteCadastro : System.Web.UI.Page
    {
        #region Propriedades
        private int IdUsuario
        {
            get
            {
                var id = 0;
                if (Session["nIdUsuario"] != null)
                    id = Convert.ToInt16(Session["nIdUsuario"]);
                return id;
            }
        }
        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (IdUsuario > 0)
                    CarregarGridAtendente();
            }
        }

        #region Metodos

        #region CarregarGridAtendente
        protected void CarregarGridAtendente()
        {
            var retorno = AtendenteBLL.SelectAll();
            if (retorno.Error == Enumerator.Error.Success)
            {
                gvAtendente.DataSource = retorno.List;
                gvAtendente.DataBind();
            }
            else
                Funcao.Alert(ClientScript, retorno.Message);

        }
        #endregion

        #region GravarAtendente
        protected void GravarAtendente()
        {
            if (ValidarAtendente())
            {
                var obj = new Atendente();
                obj.idAtendente = int.Parse(hfAtendenteId.Value);
                obj.NomeAtendente = txtNomeAtendente.Text.Trim();
                obj.fgAtivo = cbAtivo.Checked;
                var retorno = new Retorno<Atendente>();
                if (obj.idAtendente == 0)
                    retorno = AtendenteBLL.Insert(obj);
                else
                    retorno = AtendenteBLL.Update(obj);
                if (retorno.Error == Enumerator.Error.Success)
                {
                    Funcao.Alert(ClientScript, "Gravado com sucesso");
                    CarregarGridAtendente();
                    mvAtendente.ActiveViewIndex = 0;
                }
                else
                    Funcao.Alert(ClientScript, retorno.Message);
            }
        }
        #endregion

        #region ValidarAtendente
        protected bool ValidarAtendente()
        {
            var retorno = true;
            var msg = string.Empty;
            if (string.IsNullOrWhiteSpace(txtNomeAtendente.Text))
                msg = "Preencha o campo Nome atendente";

            retorno = string.IsNullOrWhiteSpace(msg);
            if (!retorno)
                Funcao.Alert(ClientScript, msg);

            return retorno;
        }
        #endregion

        #region LimparCampos
        protected void LimparCampos()
        {
            hfAtendenteId.Value = "0";
            txtNomeAtendente.Text = string.Empty;
            cbAtivo.Checked = true;
        }
        #endregion

        #region HabilitarDesabilitar
        protected void HabilitarDesabilitar(int idAtendente, bool status)
        {
            var obj = new Atendente();
            obj.idAtendente = idAtendente;
            obj.fgAtivo = !status;
            var retorno = AtendenteBLL.UpdateStatus(obj);
            if (retorno.Error == Enumerator.Error.Success)
                Funcao.Alert(ClientScript, "Status atualizado");
            else
                Funcao.Alert(ClientScript, retorno.Message);
            CarregarGridAtendente();
        }
        #endregion

        #region Excluir
        protected void Excluir(int idAtendente)
        {
            var retorno = AtendenteBLL.Delete(idAtendente);
            if (retorno.Error == Enumerator.Error.Success)
            {
                Funcao.Alert(ClientScript, "Excluído com sucesso");
                CarregarGridAtendente();
            }
            else
                Funcao.Alert(ClientScript, retorno.Message);
        }
        #endregion

        #region Editar
        protected void Editar(int idAtendente)
        {
            var retorno = AtendenteBLL.SelectAll(idAtendente);
            if (retorno.Error == Enumerator.Error.Success)
            {
                mvAtendente.ActiveViewIndex = 1;
                var list = retorno.List;
                hfAtendenteId.Value = list[0].idAtendente.ToString();
                txtNomeAtendente.Text = list[0].NomeAtendente;
                cbAtivo.Checked = list[0].fgAtivo;
            }
            else
                Funcao.Alert(ClientScript, retorno.Message);
        }
        #endregion

        #endregion

        #region Eventos

        #region btnGravar_Click
        protected void btnGravar_Click(object sender, EventArgs e)
        {
            GravarAtendente();
        }
        #endregion

        #region btnVoltar_Click
        protected void btnVoltar_Click(object sender, EventArgs e)
        {
            mvAtendente.ActiveViewIndex = 0;
        }
        #endregion

        #region btnNovo_Click
        protected void btnNovo_Click(object sender, EventArgs e)
        {
            LimparCampos();
            mvAtendente.ActiveViewIndex = 1;
        }
        #endregion

        #region gvAtendente_RowCommand
        protected void gvAtendente_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            int idAtendente = 0;
            switch (e.CommandName)
            {
                case "editar":
                    idAtendente = int.Parse(e.CommandArgument.ToString());
                    Editar(idAtendente);
                    break;
                case "excluir":
                    idAtendente = int.Parse(e.CommandArgument.ToString());
                    Excluir(idAtendente);
                    break;
                case "status":
                    int index = int.Parse(e.CommandArgument.ToString());
                    idAtendente = int.Parse(gvAtendente.DataKeys[index]["idAtendente"].ToString());
                    bool status = bool.Parse(gvAtendente.DataKeys[index]["fgAtivo"].ToString());
                    HabilitarDesabilitar(idAtendente, status);
                    break;
            }
        }
        #endregion

        #region gvAtendente_RowDataBound
        protected void gvAtendente_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                bool status = bool.Parse(gvAtendente.DataKeys[e.Row.RowIndex]["fgAtivo"].ToString());
                var botao = e.Row.FindControl("btnStatus") as Button;
                if (botao != null)
                {
                    if (status)
                        botao.Text = "Desabilitar";
                    else
                        botao.Text = "Habilitar";
                }
            }
        }
        #endregion

        #endregion

    }
}